const fs = require("fs");
const path = require("path");

const menuList = [
  {
    label: "审批管理",
    path: "approval",
  },
  {
    label: "考勤管理",
    path: "attendance",
  },
  {
    label: "组织架构",
    path: "department",
  },
  {
    label: "员工管理",
    path: "employee",
  },
  {
    label: "权限管理",
    path: "permission",
  },
  {
    label: "角色管理",
    path: "role",
  },
  {
    label: "工资管理",
    path: "salary",
  },
  {
    label: "社保管理",
    path: "social",
  },
];

/**
 * 递归创建目录
 * @param {string} dirname 目录名
 * @param {function} callback 回调函数
 * @param {string} label 标签
 * @param {boolean} verbose 是否输出日志
 */
//
function mkdirs(dirname, callback, label, pathName, verbose = true) {
  // 检查目录是否存在
  if (fs.existsSync(dirname)) {
    callback && callback(); // 调用回调函数
  } else {
    // 递归调用mkdirs函数，创建父目录

    mkdirs(
      path.dirname(dirname),
      function () {
        fs.mkdir(dirname, function (err) {
          if (err) {
            throw err;
          }
          if (verbose) {
            console.log(`创建目录 ${dirname} 成功`);
          }
          // 如果存在label参数，则将label内容写入dirname/index.vue文件中
          if (label) {
            const basString = `<template>
                                <div class='container'>
                                     <div class='app-container'>
                                       ${label}
                                      </div>
                                </div>
                            </template>

                            <script>
                            export default {
                              name:'${capitalizeFirstLetter(pathName)}'
                            }
                            </script>

                            <style lang="scss" scoped>

                            </style>`;
            /**
             * 参数1：必选参数，需要指定一个文件路径的字符串，表示文件的存放路径。
               参数2：必选参数，表示要写入的内容。
               参数3：可选参数，表示以什么格式写入文件内容，默认值是 utf8。
               参数4：必选参数，文件写入完成后的回调函数。
             */
            fs.writeFile(
              // path.join(dirname, "index.vue") 是用于拼接路径的函数，将 dirname 和 "index.vue" 连接起来，形成文件的完整路径。
              path.join(dirname, "index.vue"),
              // basString 是要写入文件的内容
              basString,
              // { flag: "a" } 是一个选项对象，其中 flag 属性设置为 "a"，表示以追加模式写入文件，即在已有内容的末尾添加新内容。
              { flag: "a" },
              // function (err) { } ... 是一个回调函数，用于处理写入文件时可能发生的错误。
              function (err) {
                if (err) {
                  throw err;
                }
                if (verbose) {
                  console.log(`在 ${dirname} 目录下创建 index.vue 文件成功`);
                }
              }
            );
          }
        });
      },
      label,
      verbose,
      pathName
    );
  }
}
function capitalizeFirstLetter(str) {
  return str.charAt(0).toUpperCase() + str.slice(1);
}

menuList.forEach((item) => {
  mkdirs(
    path.join(__dirname, "../views", item.path),
    () => {
      console.log("done");
    },
    item.label,
    item.path
  );
  if (item.children) {
    item.children.forEach((child) => {
      mkdirs(
        path.join(__dirname, "../views", child.path),
        () => {
          console.log("done");
        },
        child.label,
        child.path
      );
    });
  }
});
